package com.shopoo.oauth.domain.repository;


import java.util.List;
import java.util.Set;

import com.shopoo.oauth.domain.entity.Role;

/**
 * @Description 角色仓库
 * @Date 2020/5/24 1:58 下午
 * @Author <a href="mailto:android_li@sina.cn">Joe</a>
 **/
public interface RoleRepository {

    /**
     * 添加角色
     * @param role
     * @Return void
     * @Date: 2022/3/17 3:28 AM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    void save(Role role);

    /**
     * 根据ID删除角色
     * @param roleId
     * @Return void
     * @Date: 2022/3/17 3:22 AM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */
    void deleteById(Long roleId);

    /**
     * 根据ID查找角色
     * @param roleId
     * @Return com.shopoo.oauth.domain.entity.Role
     * @Date: 2022/3/17 3:54 AM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */
    Role getById(Long roleId);

    /**
     * 查找用户拥有的角色
     * @param userid
     * @Return java.util.Set<java.lang.String>
     * @Date: 2022/3/15 11:27 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
//    Set<String> findRoleNames(String userid);

    /**
     * 根据用户ID查询角色信息
     * @param userId
     * @Return java.util.List<com.shopoo.oauth.domain.role.Role>
     * @Date: 2022/3/15 11:27 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    List<Role> findByUserId(String userId);

    /**
     * 查找所有的角色
     * @param userId
     * @Return java.util.List<com.shopoo.oauth.domain.role.Role>
     * @Date: 2022/3/15 11:27 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    List<Role> findAllRole(String userId);

    /**
     * 查找所有有效的角色
     * @param 
     * @Return java.util.List<com.shopoo.oauth.domain.entity.Role>
     * @Date: 2022/3/17 3:45 AM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    List<Role> findAllValidRole();

    /**
     * 根据用户ID查询角色
     * @param userId
     * @Return java.util.Set<java.lang.Long>
     * @Date: 2022/3/17 3:48 AM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    Set<Long> findRolesByUserId(String userId);
    
    /**
     * 查找角色信息
     * @param role
     * @Return java.util.List<com.shopoo.oauth.domain.role.Role>
     * @Date: 2022/3/15 11:27 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    List<Role> findByConditions(Role role);

    /**
     * 检查角色名称是否存在
     * @param name
     * @Return com.shopoo.oauth.domain.role.Role
     * @Date: 2022/3/15 11:27 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    Role checkName(String name);

    /**
     * 更新用户角色
     * @param role
     * @Return void
     * @Date: 2022/3/17 2:53 AM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    void update(Role role);
}
